home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
cpp_libs
/
idioms.lha
/
idioms
/
3-15.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-08-08
|
1KB
|
35 lines
/* Copyright (c) 1992 by AT&T Bell Laboratories. */
/* Advanced C++ Programming Styles and Idioms */
/* James O. Coplien */
/* All rights reserved. */
#include "3-14.h"
String *String::newlist = 0;
void String::operator delete(void *p) {
String *s = (String *)p;
s->freepointer = newlist;
newlist = s;
}
void* String::operator new(size_t size) {
if (size != sizeof(String)) {
// this check is needed for cases when class
// derivation is used (Chapter@\*(cE) and the
// derived class has no operator new.
// String::operator delete above will field
// this over-sized block when it is reclaimed.
return malloc(size);
} else if (!newlist) {
newlist = (String *)new char[100 * sizeof(String)];
for (int i = 0; i < 99; i++) {
newlist[i].freepointer = &(newlist[i+1]);
}
newlist[i].freepointer =0;
}
String *savenew = newlist;
newlist = newlist->freepointer;
return savenew;
}